package org.ch02.test04;

import org.ch02.entity.Student;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;

/**
 * @author CSY
 * @date 2025 - 03 - 18
 */
public class MainTest01 {
    public static void main(String[] args) {
        //第一：获取操作类的Class对象
        Class<Student> clazz = Student.class;

        //第二：基于Class对象，实现相关的操作 - 运行时、动态性 - 框架、工具
        //Class对象可以获取类的所有信息（对象）
        //1.获取所有定义的方法（包括所有的访问修饰符）
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {
            //访问修饰符
            int modifiers = method.getModifiers();
            String modifierStr = Modifier.toString(modifiers);
            System.out.println("访问修饰符："+modifierStr);

            //方法名称
            System.out.println("方法名称："+method.getName());

            //获取方法参数
            Parameter[] parameters = method.getParameters();
            for (Parameter parameter : parameters) {
                //获取方法参数类型的Class对象
                Class<?> typeClass = parameter.getType();
                System.out.println("参数类型（包名.类名）："+typeClass.getName());
                System.out.println("参数类型（类名）："+typeClass.getSimpleName());
                //获取方法参数的名称 - 参数名称默认为argN来命名，N从0开始
                String name = parameter.getName();
                System.out.println("参数类型的名称："+name);
            }
            System.out.println("========================");
        }
    }
}
